#include <plugins_manager_appfwk/qls_plugin_widget.h>
#include "./ui_qls_plugin_widget.h"

#include <QStyleOption>
#include <QPainter>
#include <QFontMetrics>

#include <plugins_manager/qls_interface.h>

QLsPluginWidget::QLsPluginWidget(QWidget *parent)
    : QWidget(parent), ui(new Ui::QLsPluginWidget)
{
    ui->setupUi(this);

    /* 最多显示3行，防止有换行符，设定为2行。要是插件介绍开头三个换行符就GDZ吧
     */
    ui->informationLabel->setLineWidth(2);
}

QLsPluginWidget::~QLsPluginWidget()
{
    delete ui;
}

/* 绘图事件重载 */
void QLsPluginWidget::paintEvent(QPaintEvent *event)
{
    /* 子控件qss样式有效 */
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
    QWidget::paintEvent(event);
}

/* 尺寸变化事件重载 */
void QLsPluginWidget::resizeEvent(QResizeEvent *event)
{
    /* 根据尺寸修改插件信息标签显示内容 */
    ChangeInformationLabelTextBySize();
    QWidget::resizeEvent(event);
}

/* 根据尺寸修改插件信息标签显示内容 */
void QLsPluginWidget::ChangeInformationLabelTextBySize()
{
    /* 插件名 */
    QFontMetrics nameFontWidth(ui->nameLabel->font());
    QString nameElideNote = nameFontWidth.elidedText(
        m_pluginInfo.m_interfaceInfo->m_name, Qt::ElideRight,
        ui->nameLabel->width() * ui->nameLabel->lineWidth());

    ui->nameLabel->setText(nameElideNote);
    ui->nameLabel->setToolTip(m_pluginInfo.m_interfaceInfo->m_name);

    /* 插件信息 */
    QFontMetrics fontWidth(ui->informationLabel->font());
    QString elideNote = fontWidth.elidedText(
        m_pluginInfo.m_interfaceInfo->m_information, Qt::ElideRight,
        ui->informationLabel->width() * ui->informationLabel->lineWidth());

    ui->informationLabel->setText(elideNote);
    ui->informationLabel->setToolTip(
        m_pluginInfo.m_interfaceInfo->m_information);
}

/* 获取插件信息 */
PluginInfo QLsPluginWidget::pluginInfo() const
{
    return m_pluginInfo;
}

/* 设置插件信息 */
void QLsPluginWidget::setPluginInfo(const PluginInfo &pluginInfo)
{
    m_pluginInfo = pluginInfo;

    /* 填充图标 */
    ui->logoLabel->setStyleSheet(
        QString("QLabel{"
                "	border-image: url(%1);"
                "}")
            .arg(m_pluginInfo.m_interfaceInfo->m_logoPath));
    ui->logoLabel->setToolTip(m_pluginInfo.m_interfaceInfo->m_name);

    /* 插件版本号 */
    ui->versionLabel1->setToolTip(m_pluginInfo.m_interfaceInfo->m_version);
    ui->versionLabel2->setText(m_pluginInfo.m_interfaceInfo->m_version);
    ui->versionLabel2->setToolTip(m_pluginInfo.m_interfaceInfo->m_version);

    /* 插件介绍 */
    ChangeInformationLabelTextBySize();

    /* 加载状态 */
    /* 已加载 */
    if (m_pluginInfo.m_isLoaded) {
        ui->loadBtn->setText(tr("卸载"));
        ui->loadBtn->setToolTip(tr("卸载"));
    }
    /* 未加载 */
    else {
        ui->loadBtn->setText(tr("加载"));
        ui->loadBtn->setToolTip(tr("加载"));
    }
}

/* 加载 */
void QLsPluginWidget::on_loadBtn_clicked()
{
    emit sigLoad(m_pluginInfo);
}
